/*
 * Copyright (c) 2018.
 * http://www.ulabcare.com
 */

package com.mt.roll.upms.service;

import com.mt.roll.core.params.EnabledParam;
import com.mt.roll.core.params.IdListParam;
import com.mt.roll.core.params.IdParam;
import com.mt.roll.core.vo.IdListVo;
import com.mt.roll.core.vo.IdVo;
import com.mt.roll.core.vo.PageVo;
import com.mt.roll.core.vo.R;
import com.mt.roll.upms.params.SysRoleParam;
import com.mt.roll.upms.params.SysRoleQueryParam;
import com.mt.roll.upms.params.UserRoleParam;
import com.mt.roll.upms.vo.SysRoleVo;

import java.util.List;

/**
 * 角色服务接口
 *
 * @author jiff
 * @date 2018/11/14
 * @since 1.0
 */
public interface RoleService {
    /**
     * 获取角色
     *
     * @param idParam 主键参数
     * @return 角色
     */
    R<SysRoleVo> get(IdParam idParam);

    /**
     * 获取角色列表
     *
     * @param sysRoleQueryParam 角色查询参数
     * @return 角色列表
     */
    R<List<SysRoleVo>> list(SysRoleQueryParam sysRoleQueryParam);

    /**
     * 获取角色分页列表
     *
     * @param sysRoleQueryParam 角色查询参数
     * @return 角色分页列表
     */
    R<PageVo<SysRoleVo>> page(SysRoleQueryParam sysRoleQueryParam);

    /**
     * 新增角色
     *
     * @param sysRoleParam 角色参数
     * @return 主键
     */
    R<IdVo> add(SysRoleParam sysRoleParam);

    /**
     * 更新角色
     *
     * @param sysRoleParam 角色参数
     * @return 主键
     */
    R<IdVo> update(SysRoleParam sysRoleParam);


    /**
     * 启用停用
     *
     * @param enabledParam 启停参数
     * @return 主键
     */
    R<IdVo> enabled(EnabledParam enabledParam);

    /**
     * 删除角色
     *
     * @param idParam 主键参数
     * @return 主键
     */
    R<IdVo> delete(IdParam idParam);

    /**
     * 批量删除角色
     *
     * @param idListParam 主键列表参数
     * @return 主键列表
     */
    R<IdListVo> delete(IdListParam idListParam);


    /**
     * 保存用户角色
     *
     * @param userRoleParam 用户角色参数
     * @return 主键列表
     */
    R<IdListVo> saveUserRole(UserRoleParam userRoleParam);

    /**
     * 获取用户角色列表
     *
     * @param idParam 主键参数
     * @return 角色列表
     */
    R<List<SysRoleVo>> listByUser(IdParam idParam);
}
